import sumNthPowerDeviations from "./sum_nth_power_deviations.js";

/**
 * [方差](http://en.wikipedia.org/wiki/Variance)
 * 是数据点与均值之间偏差的平方和。
 *
 * 这是方差的实现，不是样本方差：
 * 如果你需要一个样本度量，请使用 `sampleVariance` 方法。
 *
 * @param {Array<number>} x 一个包含一个或多个数据点的总体
 * @returns {number} 方差：一个大于或等于零的值。
 * 零表示所有值都相同。
 * @throws {Error} 如果 x 的长度为 0
 * @example
 * variance([1, 2, 3, 4, 5, 6]); // => 2.9166666666666665
 */
function variance(x) {
    if (x.length === 0) {
        throw new Error("计算方差需要至少一个数据点");
    }

    // 计算均值与每个值之间的偏差平方的均值。
    return sumNthPowerDeviations(x, 2) / x.length;
}

export default variance;
